gtk/main: Reset active state on grab broken only if implicit
authorCarlos Garnacho <carlosg@gnome.org>
Sat, 14 Nov 2020 09:48:04 +0000 (10:48 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Sat, 14 Nov 2020 09:52:34 +0000 (10:52 +0100)
An implicit grab means some button is down, reset the active state
only in that case when we get a grab broken event.

Avoids active state accounting warnings when we do get active grabs
broken (e.g. after selecting a menu option).

gtk/gtkmain.c

index 72941e8620609d9e2fe4443d2e12e3528ac29cd8..6f7ca2337cfef520375b2368ada56ff27724cf53 100644 (file)
@@ -1506,10 +1506,13 @@ handle_pointing_event (GdkEvent *event)
     case GDK_TOUCHPAD_SWIPE:
       break;
     case GDK_GRAB_BROKEN:
-      target = gtk_window_lookup_effective_pointer_focus_widget (toplevel,
-                                                                 device,
-                                                                 sequence);
-      set_widget_active_state (target, TRUE);
+      if (gdk_grab_broken_event_get_implicit (event))
+        {
+          target = gtk_window_lookup_effective_pointer_focus_widget (toplevel,
+                                                                     device,
+                                                                     sequence);
+          set_widget_active_state (target, TRUE);
+        }
       break;
     default:
       g_assert_not_reached ();